"""
运行时状态管理模块

这个模块提供了一个全局状态管理类，用于在应用运行期间存储临时状态数据。
应用重启后数据会被清空。支持动态添加和删除键值对。
"""
from typing import Any, Dict, Optional
from threading import Lock

class RuntimeState:
    """
    运行时状态管理类
    
    提供了一个线程安全的全局状态存储机制。
    支持动态添加、获取、删除键值对数据。
    应用重启后状态会被重置。
    
    Attributes:
        _state: 存储状态数据的字典
        _lock: 线程锁，用于保证线程安全
    """
    _state: Dict[str, Any] = {}
    _lock = Lock()
    
    @classmethod
    def set(cls, key: str, value: Any) -> None:
        """
        设置状态值
        
        Args:
            key: 状态键名
            value: 状态值
        """
        with cls._lock:
            cls._state[key] = value
    
    @classmethod
    def get(cls, key: str, default: Any = None) -> Any:
        """
        获取状态值
        
        Args:
            key: 状态键名
            default: 如果键不存在时返回的默认值
            
        Returns:
            存储的值或默认值
        """
        with cls._lock:
            return cls._state.get(key, default)
    
    @classmethod
    def delete(cls, key: str) -> None:
        """
        删除状态值
        
        Args:
            key: 要删除的状态键名
        """
        with cls._lock:
            cls._state.pop(key, None)
    
    @classmethod
    def clear(cls) -> None:
        """清空所有状态数据"""
        with cls._lock:
            cls._state.clear()
    
    @classmethod
    def has_key(cls, key: str) -> bool:
        """
        检查键是否存在
        
        Args:
            key: 要检查的键名
            
        Returns:
            bool: 键是否存在
        """
        with cls._lock:
            return key in cls._state
    
    @classmethod
    def get_all(cls) -> Dict[str, Any]:
        """
        获取所有状态数据的副本
        
        Returns:
            Dict[str, Any]: 包含所有状态数据的字典副本
        """
        with cls._lock:
            return cls._state.copy() 